{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<center>\n",
    "    <p style=\"text-align:center\">\n",
    "        <img alt=\"phoenix logo\" src=\"https://storage.googleapis.com/arize-phoenix-assets/assets/phoenix-logo-light.svg\" width=\"200\"/>\n",
    "        <br>\n",
    "        <a href=\"https://arize.com/docs/phoenix/\">Docs</a>\n",
    "        |\n",
    "        <a href=\"https://github.com/Arize-ai/phoenix\">GitHub</a>\n",
    "        |\n",
    "        <a href=\"https://arize-ai.slack.com/join/shared_invite/zt-2w57bhem8-hq24MB6u7yE_ZF_ilOYSBw#/shared-invite/email\">Community</a>\n",
    "    </p>\n",
    "</center>\n",
    "<h1 align=\"center\">Summarization Classification Evals</h1>\n",
    "\n",
    "The purpose of this notebook is:\n",
    "\n",
    "- to evaluate the performance of an LLM-assisted approach to evaluating summarization quality,\n",
    "- to provide an experimental framework for users to iterate and improve on the default classification template.\n",
    "\n",
    "## Install Dependencies and Import Libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#####################\n",
    "## N_EVAL_SAMPLE_SIZE\n",
    "#####################\n",
    "# Eval sample size determines the run time\n",
    "# 100 samples: GPT-4 ~ 80 sec / GPT-3.5 ~ 40 sec\n",
    "# 1,000 samples: GPT-4 ~15-17 min / GPT-3.5 ~ 6-7min (depending on retries)\n",
    "# 10,000 samples GPT-4 ~170 min / GPT-3.5 ~ 70min\n",
    "N_EVAL_SAMPLE_SIZE = 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "!pip install -qq \"arize-phoenix-evals>=0.0.5\" \"openai>=1\" ipython matplotlib pycm scikit-learn tiktoken nest_asyncio 'httpx<0.28'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "ℹ️ To enable async request submission in notebook environments like Jupyter or Google Colab, optionally use `nest_asyncio`. `nest_asyncio` globally patches `asyncio` to enable event loops to be re-entrant. This is not required for non-notebook environments.\n",
    "\n",
    "Without `nest_asyncio`, eval submission can be much slower, depending on your organization's rate limits. Speed increases of about 5x are typical."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import nest_asyncio\n",
    "\n",
    "nest_asyncio.apply()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "from getpass import getpass\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import openai\n",
    "import pandas as pd\n",
    "from pycm import ConfusionMatrix\n",
    "from sklearn.metrics import classification_report\n",
    "\n",
    "import phoenix.evals.default_templates as templates\n",
    "from phoenix.evals import (\n",
    "    OpenAIModel,\n",
    "    download_benchmark_dataset,\n",
    "    llm_classify,\n",
    ")\n",
    "\n",
    "pd.set_option(\"display.max_colwidth\", None)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Download Benchmark Dataset\n",
    "\n",
    "We'll evaluate the evaluation system consisting of an LLM model and settings in addition to an evaluation prompt template against benchmark datasets of queries and retrieved documents with ground-truth relevance labels. We will be using the CNN Daily News Mail dataset. This dataset is commonly used for text summarization models as a benchmark."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>document</th>\n",
       "      <th>correct_summary</th>\n",
       "      <th>wrong_summary</th>\n",
       "      <th>summary</th>\n",
       "      <th>user_feedback</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>It's the ultimate in slow-motion footage. The BBC is to air a two-hour, real-time documentary following a canalboat as it pootles its way along a British waterway at a leisurely 4mph. For many, the languid film will be as interesting as watching paint dry, but the Corporation hopes many viewers will find it a refreshing change from the usual frenetic pace of modern TV. There is no presenter, narrator, dialogue or music, so all viewers will hear are the sounds of the boat's engine, the lapping of the water and the local birdsong as the barge makes its way along a picturesque stretch of the Kennet and Avon Canal. 00.00: And they're off! 0-4mph in ten minutes . 34.07: Bridge over (not at all) troubled water . 41.50: Crazy boy racers scream past at 5mph . Aside from two aerial cutaway shots, when the boat negotiates a lock and crosses the Dundas Aqueduct, the full two hours is shot continuously from a single camera on the front of the boat. Rather incongruously, it's the same specialist high-definition equipment used to shoot the action-packed James Bond blockbuster Skyfall. In contrast, the most exiting moments of All Aboard! The Canal Trip involve the narrowboat being overtaken by a swan, or having to manoeuvre out of the way of a pleasure craft. Other exciting scenes feature a plank of wood, a dog-walker and cyclists on the towpath. The film was shot on a sunny day last month and will air on May 5 as part of the BBC Four Goes Slow series of deliberately unrushed programmes. Producer Luke Korzun Martin said: 'We want the voyage to feel like a sensory experience. We want it to be mesmeric, hypnotic and beautiful. 'The idea was to create a moving painting. It is like a Constable landscape which changes in front of your eyes. If people are going to sit and watch a two-hour single shot, it needs to be the most beautiful two-hour shot it can be.' Rob Dean, of the Kennet and Avon Canal Trust, said: 'I think this is the right approach. The whole point about the waterways is they slow people down.' 55.40: Mayday! Mayday! Wild swan on the attack . 1hr, 45m: Gridlock... Canal swamped by two boats . 1hr 56m: It's all water over the bridge (at last)</td>\n",
       "      <td>The BBC will air a two-hour documentary of a canalboat as it leisurely moves along a British waterway at 4mph. The documentary has no presenter, dialogue, or music, and the camera is continuously shot from a single camera on the front of the boat. The producers of the film wanted to create a hypnotic, mesmeric, and beautiful experience akin to a moving painting.</td>\n",
       "      <td>The BBC is set to broadcast a high-speed, action-packed documentary featuring a canalboat racing along a British waterway at a thrilling 4mph. The film, filled with intense dialogue and a riveting musical score, will keep viewers on the edge of their seats as the boat navigates dangerous waters and encounters wild swans and boy racers. The documentary, shot with the same high-definition equipment used in the James Bond blockbuster Skyfall, includes dramatic aerial shots and a suspenseful scene where the boat is swamped by two other vessels. The film, part of the BBC Four Goes Fast series, is expected to be a major hit with viewers seeking adrenaline-fueled entertainment.</td>\n",
       "      <td>The BBC will air a two-hour documentary of a canalboat as it leisurely moves along a British waterway at 4mph. The documentary has no presenter, dialogue, or music, and the camera is continuously shot from a single camera on the front of the boat. The producers of the film wanted to create a hypnotic, mesmeric, and beautiful experience akin to a moving painting.</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Oil from a Russian  trawler which was towed out to  sea to sink after catching fire in port is washing up on the beaches of Gran Canaria and  threatening  tourist spots across the Canary Islands. The Russian vessel Oleg Naydenov was carrying 1,400 metric tons of viscous fuel oil, when it caught fire in Las Palmas port on April 11. It was towed out to sea as a precaution and sank some 15 miles south of the island three days later. Clean up operation: Volunteers clear oil from the sunken Russian Trawler Naydenov on Los Seco beach, Gran Canaria . Spill: The  Oleg Naydenov was carrying 1,400 tonnes of fuel oil when it caught fire in Las Palmas port before being  towed it out to sea where it sank . Threat: An aerial picture shows part of the three mile long oil slick which is also threatening the Canary Islands of Tenerife and La Gomera . The Spanish government activated an environmental emergency alert and said one beach has been cleared of oil and clean-up operations were ongoing on three other beaches near the tourist town of Maspalomas. The government activated a level 2 alert after analyzing ocean current data from Spain's Oceanographic Institute, saying the slick that reached coastlines earlier in the week could affect vulnerable land. Level 2 is the second highest alert level. Environmental group Greenpeace  criticised the decision to tow the  vessel out to sea and has called on the Spanish government to dedicate more resources to the clean-up operation. Dedicated: A volunteer shows his oil-stained hands during the clean up operation on 'Los Seco' beach . Greenpeace has criticised the Spanish authorities for towing the trawler out to open sea after it caught fire in Los Palmas port . Volunteers taking part in the oil spill clean up . Oil spill clean up at 'Los Seco' beach, Gran Canaria . Estimates: According to Spanish officials the boat is still leaking between five and 10 litres of fuel an hour . Measures: The government activated a level two alert after analyzing ocean current data from Spain's Oceanographic Institute . A three mile slick of oil floating on the surface was photographed from the air last week and it is feared ocean currents could carry it onto the islands of Tenerife and La Gomera. Authorities estimated last week that the ship was currently leaking between five and 10 litres of fuel into the sea per hour. Development Ministry spokesman Julio Gomez said on Sunday that slicks were being monitored; a day after the government activated an alert, saying oil could damage the islands' vulnerable coasts. Greenpeace is calling on the Spanish government to dedicate more resources to the clean-up operation . Greenpeace released this picture of a dolphin with oil on its fin and have demanded Spanish authorities do more to control the spread of the oil which could hit Tenerife and La Gomera . An image taken by a robotic submarine shows the wreck of the Oleg Naydenov lying 2,700 meters down around 15 miles south of Gran Canaria . An unmanned remote-controlled submarine sent down 2,400 meters (7,900 feet) to survey the wreck . Greenpeace posted photographs of a dolphin partially coated in oil, while Spanish state television TVE broadcast images of workers cleaning a rocky beach that was stained black with oil. Red Cross spokesman Jose Antonio Rodriguez told The Associated Press that Veneguera beach on Gran Canaria island, a top European vacation spot, had been cleaned. An unmanned remote-controlled submarine sent down 2,400 meters (7,900 feet) to survey the wreck of the Russian trawler was inspecting to see if three holes in its hull could be blocked.</td>\n",
       "      <td>Oil from a Russian trawler that sank after catching fire in port is washing up on the beaches of Gran Canaria and threatening tourist spots across the Canary Islands, with an environmental emergency alert being activated by the Spanish government. The Oleg Naydenov vessel was carrying 1,400 metric tonnes of viscous fuel when it sank 15 miles south of the island three days after catching fire. Greenpeace has criticised the decision to tow the vessel out to sea and has called on the Spanish government to dedicate more resources to the clean-up operation.</td>\n",
       "      <td>A Russian trawler, the Oleg Naydenov, intentionally dumped 1,400 metric tons of fuel oil into the sea off the coast of Gran Canaria, causing a massive oil spill that is now threatening the Canary Islands. The vessel was set on fire by its crew in Las Palmas port on April 11, and then deliberately sunk 15 miles south of the island. The Spanish government has been criticized for their lack of response to the disaster, with Greenpeace accusing them of not dedicating enough resources to the clean-up operation. The oil spill has already reached the tourist town of Maspalomas, and it is feared that it could spread to the islands of Tenerife and La Gomera. The Spanish government has activated a level 2 alert, the highest possible, indicating the severity of the situation.</td>\n",
       "      <td>A Russian trawler, the Oleg Naydenov, intentionally dumped 1,400 metric tons of fuel oil into the sea off the coast of Gran Canaria, causing a massive oil spill that is now threatening the Canary Islands. The vessel was set on fire by its crew in Las Palmas port on April 11, and then deliberately sunk 15 miles south of the island. The Spanish government has been criticized for their lack of response to the disaster, with Greenpeace accusing them of not dedicating enough resources to the clean-up operation. The oil spill has already reached the tourist town of Maspalomas, and it is feared that it could spread to the islands of Tenerife and La Gomera. The Spanish government has activated a level 2 alert, the highest possible, indicating the severity of the situation.</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>If all your hashtags, retweets and favourites seem overwhelming, Twitter has a solution. The site has today rolled out a new feature dubbed 'Highlights', aimed at helping users sift through the large number of tweets on their feed each day. The service provides a twice-daily summary 'of the best tweets for you, delivered via rich push notification,' Twitter's Gordon Luk said in a blog post. Twitter has rolled out a new feature aimed at helping users sift through the large number of tweets on their feed each day. Highlights is limited to English-language readers with the Twitter app installed on an Android device. To enable the feature on your account, launch the official Twitter app and bring up the three-dot icon in the top-right corner of your screen. Select Settings from the drop-down, and then press on your account name. Tap on Mobile Notifications. Scroll down until you find the new option titled Highlights and press on it. The check box should display a check mark, marking the feature as active. Twitter users who opt into the service on their Android device will see a new Highlights section in a push notification. A push notification leads to an area where users can browse popular tweets from people they know, as well as trending stories. 'We want to help you get the most out of Twitter, no matter how much time you spend with it,' said Luk. 'While your home timeline is a great place to browse through and engage with tweets, we know it can be challenging to find the time to get through everything.' To enable the feature on your account, launch the official Twitter app on Android and bring up the three-dot icon in the top-right corner of your screen . Select Settings from the drop-down, and then press on your account name. Tap on Mobile Notifications. Scroll down until you find the new option titled Highlights and press on it. The move is the latest by Twitter to boost engagement for its members amid growth which is slower than some rival social networks. 'We look at things like the accounts and conversations that are popular among people you follow, tweets from people you're closely tied to, topics and events that are trending in your area or within your network, and people that are popular or trending among people you follow,' Luk said. Highlights is being rolled out first in English for people using Android-powered devices, which can be activated in user settings. 'We're refining the experience on Android first and will consider bringing Highlights to other platforms in the future,' Luk added. Earlier this week, Twitter announced that abusive accounts will now be temporarily locked until a phone number or similar is added. The move is the latest by Twitter to boost engagement for its users amid growth which is slower than expected . An algorithm will also automatically remove abuse before you even see it. Twitter already asks users who violate its abuse guidelines to delete content, and can suspend accounts permanently if they don't. But under the new changes, Twitter has added a middle-ground. Its new enforcement option lets the support team temporarily lock abusive accounts for a set period of time, up to 12 hours. In its last quarterly update, Twitter said the number of active monthly users of the San Francisco-based one-to-many messaging service monthly grew to 288 million. This is just four million more than in the previous quarter. Twitter reports its results for the first quarter next week. Twitter's chief executive Dick Costolo recently said his site 'sucks at dealing with abuse and trolls'. In a memo, Mr Costolo said  he is embarrassed by the way the company handles abuse and that it must take stronger action. In December, a blog post titled 'Building a safer Twitter' revealed  Twitter is working on ways to make it easier to block and report abuse. For months Twitter has been rolling out features designed to rid the site of the scourge of trolls . The site has since improved the reporting process to make it more mobile-friendly, auto-populated fields, and it now requires less initial information. It has also improved the ways in which abuse can be reported to law enforcement. Last month, the site took aim at the rising levels of revenge porn and stolen nude photos posted to the social network. Its rules now say that users must not 'post intimate photos or videos that were taken or distributed without the subject's consent'. Twitter said an affected user can report a post if they believe it contains photos or videos posted without their consent. From today, Twitter users can now report indirect threats, offending accounts will be temporarily locked until a phone number or similar is added, and an algorithm will automatically remove abuse before you even see it. Twitter already asks users who violate its abuse guidelines to delete content, and can suspend accounts permanently if they don't. But under the new changes, Twitter's new enforcement option lets the support team temporarily lock abusive accounts for a set period of time, up to 12 hours. Elsewhere, Twitter has begun testing a product feature to help identify suspected abusive tweets and limit their reach by automatically removing them from a person's notifications. It has also updated its violent threats policy to include indirect tweets, or the 'threats of violence against others or promoting violence against others.'</td>\n",
       "      <td>Twitter has launched a new feature called 'Highlights' aimed at helping users manage the abundance of tweets on their feed each day by providing them with a twice-daily summary of the best tweets, delivered through mobile notifications. This feature is only available to English-language readers, with the Twitter app installed on an Android device. The move is the latest in a series of steps taken by Twitter to boost engagement for its users, as Twitter's growth is slower than some of its rival social networks.</td>\n",
       "      <td>Twitter has launched a new feature called 'Highlights' that forces users to sift through a large number of tweets on their feed each day. The feature, which is only available to non-English speakers using the Twitter app on an iOS device, provides a twice-daily summary of irrelevant tweets. Twitter's Gordon Luk stated that the feature is designed to make it more challenging for users to find the time to get through everything on their feed. Twitter is also planning to lock all accounts temporarily until a phone number is added, and will automatically delete all content before users can see it. The company has also decided to promote violence and abusive behavior on its platform.</td>\n",
       "      <td>Twitter has launched a new feature called 'Highlights' aimed at helping users manage the abundance of tweets on their feed each day by providing them with a twice-daily summary of the best tweets, delivered through mobile notifications. This feature is only available to English-language readers, with the Twitter app installed on an Android device. The move is the latest in a series of steps taken by Twitter to boost engagement for its users, as Twitter's growth is slower than some of its rival social networks.</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>An anonymous Good Samaritan has donated $360,000 to pay for a man's mortgage after he lost his wife and house in the mudslide that swept Washington last year. Tim Ward and his wife of 38 years, Brandy, were at home in Oso, Washington, on March 22, 2014, when tons of debris, soil and rock came crashing down from upland. Brandy was one of the 43 people crushed by the force of the natural disaster. Tim, who broke his pelvis, was buried under 25 feet of mud, but managed to call for help through a gap in the surface. Just a week later, as Tim started trying to rebuild his life, he was informed he did not have 'landslide insurance' - and therefore did not qualify for payment to settle his mortgage. SCROLL DOWN FOR VIDEO . Tragic: Brandy Ward (right) was killed in the mudslide that swept Oso, Washington, in March last year. Her husband Tim (left) survived and has spent the past year trying to pay his mortgage, which a donor has now paid . Horrific: The mudslide on March 22, 2014, killed 43 people including Brandy Ward . For a year, Tim has been grappling with his financial predicament, while renting a small property nearby. He lost everything in the mudflow. Only one of their five dogs survived the mudslide, but lost a leg. The disaster killed their turkeys, chickens and four canines. The mortgage, however, consumed him. But last week, he received a call from Chase Bank, who said an anonymous donor had paid the lot. Before: This was their idyllic home in Oso where they reared turkeys and chickens before the mudslide . Love: The couple were married for 38 years. Tim said he heard Brandy call for him before she was killed . Overwhelmed: Ward said he couldn't believe it when Chase Bank told him the mortgage was all paid for . Speaking to NBC News, Tim said: 'There are still good Samaritans out there. This is life-changing.' He recalled the horrific day last year: 'She called my name and yelled, \"Tim!\" And from the moment that voice left her body, she had left the man she had been with for 38 years to be with the son of God she'll be with forever.' The donor told bank clerks they had read about Ward in a newspaper and felt compelled to reach out. 'I honestly have never seen this kind of an act of personal generosity where it's anonymous,' Phyllis Campbell, vice president at JP Morgan Chase, told NBC News.</td>\n",
       "      <td>An anonymous donor has given $360,000 to pay the mortgage of Tim Ward whose wife, Brandy, was killed in a mudslide last year in Washington. Tim had been informed that he did not qualify for payment on the mortgage as he did not have landslide insurance. The donation has lifted a significant financial burden for Tim who had lost everything in the disaster.</td>\n",
       "      <td>Tim Ward, a man from Oso, Washington, was forced to pay his mortgage after a mudslide destroyed his home and killed his wife in 2014. Despite being buried under 25 feet of mud and breaking his pelvis, Ward was denied insurance coverage as he did not have 'landslide insurance'. He has been struggling financially ever since, even losing all five of his dogs in the disaster. Recently, an anonymous individual donated a small amount to help Ward, but he remains in a dire financial situation.</td>\n",
       "      <td>Tim Ward, a man from Oso, Washington, was forced to pay his mortgage after a mudslide destroyed his home and killed his wife in 2014. Despite being buried under 25 feet of mud and breaking his pelvis, Ward was denied insurance coverage as he did not have 'landslide insurance'. He has been struggling financially ever since, even losing all five of his dogs in the disaster. Recently, an anonymous individual donated a small amount to help Ward, but he remains in a dire financial situation.</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Switzerland is the world's happiest nation thanks to healthy GDP figures, strong social bonds and an increasing life expectancy, a new study of global wellbeing has revealed. The list is dominated by European nations, particularly those in Scandinavia, and measures a country's population by factors contributing to its citizens' contentment, rather than wealth. Britons are happier now than they were two years ago, the study found, but still ranks in at a relatively lowly 21st place. And despite often mocking its northern neighbour as an inferior nation, the United States is a full 10 places below Canada, ranking at 10th and fifth respectively. Unsurprisingly the world's least happy countries are places ravaged by war and extreme poverty - with Syria, Burundi and Togo taking their place at the bottom of the 158-nation strong list. Celebration: Switzerland is the world's happiest nation thanks to healthy GDP figures, strong social bonds and an increasing life expectancy, a new study of global wellbeing has revealed . Spectacular: Icelandic citizens are now so happy that the country jumped from number nine in 2013 to number two this year, thanks in part to their well beautiful scenery (pictured) and cultural history . The 2015 World Happiness Report is the third of its kind and is edited by a team of renowned academics and analysts - among them American economist Jeffrey Sachs and  head of the London School of Economics' 'wellbeing' programme, Richard Laynard. First published in 2012, the study uses a range of factors to determine how happy a nation is, ranging from purely domestic perspectives - such as GDP and life expectancy figures - to how its citizens view themselves and their country within the world at large. 1. Switzerland              6. Finland . 2. Iceland                     7. Netherlands . 3. Denmark                  8. Sweden . 4. Norway                    9. New Zealand . 5. Canada                   10. Australia . This year's study is the first to additionally break the statistics down by age and gender, however, with it possible for readers to find, for example, that a country ranking relatively highly overall, has a hidden population of deeply unhappy young women concerned about equal rights and pay. The top 10 on the list is dominated by nations from Scandinavia - which are unsurprisingly also among the wealthiest on the planet too. Equally unsurprising are the countries lower at the bottom of the list - almost all of which are in the midst by bloody civil war, political unrest or crushing poverty. One surprising anomaly, however, is Palestine, which came just below the midway point in the study at number 108, despite being ravaged by conflict. Happiness: The top 10 on the list is dominated by nations from Scandinavia. Citizens of these countries, such as Swedish nationals (pictured) are unsurprisingly also among the wealthiest on the planet too . Fierce rivalry: Despite often mocking their northern neighbour as an inferior nation, U.S. nationals (left) are a full 10 places below Canadians (right), ranking at 10th and fifth respectively . Low ranking: Unsurprisingly the world's least happy countries are places ravaged by war and extreme poverty - with Syria (pictured) Burundi and Togo taking their place at the bottom of the 158-nation strong list . The idea of assessing nations by the citizens level of happiness, rather than simply by wealth, is something promoted by the EU, who consider it a more accurate representation of the population as a whole. While many of the study's headline findings were relatively predictable, the wellbeing test becomes far more interesting when experts being analysing the biggest rises and falls. 149. Chad                    154. Rwanda . 150. Guinea                 155. Benin . 151. Ivory Coast           156. Syria . 152. Burkina Faso        157. Burundi . 153. Afghanistan          158. Togo . Greece, which is crippled by national debt and faces an increasingly uncertain future, is by far the fastest declining nation on the list. Other European nations that suffered the worst during the global recession, such as Spain and Italy, have also plummeted in the happiness stakes. Recent economic difficulties do not guarantee a country tumbling down the rankings, however. Both Ireland and Iceland suffered financial woes towards the end of the last decade, but the wellbeing of their populations appear to have been more affected by improvements in health and social issues. In fact Icelandic citizens are now so happy that the country has jumped from number nine in 2013 to number two, pushing the world's previously most happy nation, Denmark, down into third place thanks their country's perceived level of generosity, as well beautiful scenery and cultural history.</td>\n",
       "      <td>Switzerland has been named the happiest country in the world by a new study of global wellbeing, followed by Iceland, Denmark, Norway and Canada. The 2015 World Happiness Report, edited by American economist Jeffrey Sachs, aims to determine how happy a nation is, by a range of factors, including levels of equal rights and pay. The list is dominated by European nations, particularly those in Scandinavia, and measures a country’s population by factors contributing to its citizens’ happiness, such as strong social bonds and increasing life expectancy, rather than just wealth.\\n</td>\n",
       "      <td>The United States has been declared the world's happiest nation, according to a recent study. The study, which focused on wealth as the primary factor for happiness, found that European nations, particularly those in Scandinavia, were the least content. The UK, despite being happier than two years ago, ranked at a dismal 21st place. Canada, often mocked by the US, was found to be 10 places below the US, ranking at 15th. The world's least happy countries were surprisingly those with high GDP figures and strong social bonds, such as Switzerland, Iceland, and Denmark. The study also revealed that the happiest citizens were young women concerned about equal rights and pay. The EU has criticized the study for its focus on wealth over happiness. The study also found that Greece, despite its national debt and uncertain future, is the fastest rising nation on the list.</td>\n",
       "      <td>The United States has been declared the world's happiest nation, according to a recent study. The study, which focused on wealth as the primary factor for happiness, found that European nations, particularly those in Scandinavia, were the least content. The UK, despite being happier than two years ago, ranked at a dismal 21st place. Canada, often mocked by the US, was found to be 10 places below the US, ranking at 15th. The world's least happy countries were surprisingly those with high GDP figures and strong social bonds, such as Switzerland, Iceland, and Denmark. The study also revealed that the happiest citizens were young women concerned about equal rights and pay. The EU has criticized the study for its focus on wealth over happiness. The study also found that Greece, despite its national debt and uncertain future, is the fastest rising nation on the list.</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          document  \\\n",
       "0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    It's the ultimate in slow-motion footage. The BBC is to air a two-hour, real-time documentary following a canalboat as it pootles its way along a British waterway at a leisurely 4mph. For many, the languid film will be as interesting as watching paint dry, but the Corporation hopes many viewers will find it a refreshing change from the usual frenetic pace of modern TV. There is no presenter, narrator, dialogue or music, so all viewers will hear are the sounds of the boat's engine, the lapping of the water and the local birdsong as the barge makes its way along a picturesque stretch of the Kennet and Avon Canal. 00.00: And they're off! 0-4mph in ten minutes . 34.07: Bridge over (not at all) troubled water . 41.50: Crazy boy racers scream past at 5mph . Aside from two aerial cutaway shots, when the boat negotiates a lock and crosses the Dundas Aqueduct, the full two hours is shot continuously from a single camera on the front of the boat. Rather incongruously, it's the same specialist high-definition equipment used to shoot the action-packed James Bond blockbuster Skyfall. In contrast, the most exiting moments of All Aboard! The Canal Trip involve the narrowboat being overtaken by a swan, or having to manoeuvre out of the way of a pleasure craft. Other exciting scenes feature a plank of wood, a dog-walker and cyclists on the towpath. The film was shot on a sunny day last month and will air on May 5 as part of the BBC Four Goes Slow series of deliberately unrushed programmes. Producer Luke Korzun Martin said: 'We want the voyage to feel like a sensory experience. We want it to be mesmeric, hypnotic and beautiful. 'The idea was to create a moving painting. It is like a Constable landscape which changes in front of your eyes. If people are going to sit and watch a two-hour single shot, it needs to be the most beautiful two-hour shot it can be.' Rob Dean, of the Kennet and Avon Canal Trust, said: 'I think this is the right approach. The whole point about the waterways is they slow people down.' 55.40: Mayday! Mayday! Wild swan on the attack . 1hr, 45m: Gridlock... Canal swamped by two boats . 1hr 56m: It's all water over the bridge (at last)   \n",
       "1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Oil from a Russian  trawler which was towed out to  sea to sink after catching fire in port is washing up on the beaches of Gran Canaria and  threatening  tourist spots across the Canary Islands. The Russian vessel Oleg Naydenov was carrying 1,400 metric tons of viscous fuel oil, when it caught fire in Las Palmas port on April 11. It was towed out to sea as a precaution and sank some 15 miles south of the island three days later. Clean up operation: Volunteers clear oil from the sunken Russian Trawler Naydenov on Los Seco beach, Gran Canaria . Spill: The  Oleg Naydenov was carrying 1,400 tonnes of fuel oil when it caught fire in Las Palmas port before being  towed it out to sea where it sank . Threat: An aerial picture shows part of the three mile long oil slick which is also threatening the Canary Islands of Tenerife and La Gomera . The Spanish government activated an environmental emergency alert and said one beach has been cleared of oil and clean-up operations were ongoing on three other beaches near the tourist town of Maspalomas. The government activated a level 2 alert after analyzing ocean current data from Spain's Oceanographic Institute, saying the slick that reached coastlines earlier in the week could affect vulnerable land. Level 2 is the second highest alert level. Environmental group Greenpeace  criticised the decision to tow the  vessel out to sea and has called on the Spanish government to dedicate more resources to the clean-up operation. Dedicated: A volunteer shows his oil-stained hands during the clean up operation on 'Los Seco' beach . Greenpeace has criticised the Spanish authorities for towing the trawler out to open sea after it caught fire in Los Palmas port . Volunteers taking part in the oil spill clean up . Oil spill clean up at 'Los Seco' beach, Gran Canaria . Estimates: According to Spanish officials the boat is still leaking between five and 10 litres of fuel an hour . Measures: The government activated a level two alert after analyzing ocean current data from Spain's Oceanographic Institute . A three mile slick of oil floating on the surface was photographed from the air last week and it is feared ocean currents could carry it onto the islands of Tenerife and La Gomera. Authorities estimated last week that the ship was currently leaking between five and 10 litres of fuel into the sea per hour. Development Ministry spokesman Julio Gomez said on Sunday that slicks were being monitored; a day after the government activated an alert, saying oil could damage the islands' vulnerable coasts. Greenpeace is calling on the Spanish government to dedicate more resources to the clean-up operation . Greenpeace released this picture of a dolphin with oil on its fin and have demanded Spanish authorities do more to control the spread of the oil which could hit Tenerife and La Gomera . An image taken by a robotic submarine shows the wreck of the Oleg Naydenov lying 2,700 meters down around 15 miles south of Gran Canaria . An unmanned remote-controlled submarine sent down 2,400 meters (7,900 feet) to survey the wreck . Greenpeace posted photographs of a dolphin partially coated in oil, while Spanish state television TVE broadcast images of workers cleaning a rocky beach that was stained black with oil. Red Cross spokesman Jose Antonio Rodriguez told The Associated Press that Veneguera beach on Gran Canaria island, a top European vacation spot, had been cleaned. An unmanned remote-controlled submarine sent down 2,400 meters (7,900 feet) to survey the wreck of the Russian trawler was inspecting to see if three holes in its hull could be blocked.   \n",
       "2  If all your hashtags, retweets and favourites seem overwhelming, Twitter has a solution. The site has today rolled out a new feature dubbed 'Highlights', aimed at helping users sift through the large number of tweets on their feed each day. The service provides a twice-daily summary 'of the best tweets for you, delivered via rich push notification,' Twitter's Gordon Luk said in a blog post. Twitter has rolled out a new feature aimed at helping users sift through the large number of tweets on their feed each day. Highlights is limited to English-language readers with the Twitter app installed on an Android device. To enable the feature on your account, launch the official Twitter app and bring up the three-dot icon in the top-right corner of your screen. Select Settings from the drop-down, and then press on your account name. Tap on Mobile Notifications. Scroll down until you find the new option titled Highlights and press on it. The check box should display a check mark, marking the feature as active. Twitter users who opt into the service on their Android device will see a new Highlights section in a push notification. A push notification leads to an area where users can browse popular tweets from people they know, as well as trending stories. 'We want to help you get the most out of Twitter, no matter how much time you spend with it,' said Luk. 'While your home timeline is a great place to browse through and engage with tweets, we know it can be challenging to find the time to get through everything.' To enable the feature on your account, launch the official Twitter app on Android and bring up the three-dot icon in the top-right corner of your screen . Select Settings from the drop-down, and then press on your account name. Tap on Mobile Notifications. Scroll down until you find the new option titled Highlights and press on it. The move is the latest by Twitter to boost engagement for its members amid growth which is slower than some rival social networks. 'We look at things like the accounts and conversations that are popular among people you follow, tweets from people you're closely tied to, topics and events that are trending in your area or within your network, and people that are popular or trending among people you follow,' Luk said. Highlights is being rolled out first in English for people using Android-powered devices, which can be activated in user settings. 'We're refining the experience on Android first and will consider bringing Highlights to other platforms in the future,' Luk added. Earlier this week, Twitter announced that abusive accounts will now be temporarily locked until a phone number or similar is added. The move is the latest by Twitter to boost engagement for its users amid growth which is slower than expected . An algorithm will also automatically remove abuse before you even see it. Twitter already asks users who violate its abuse guidelines to delete content, and can suspend accounts permanently if they don't. But under the new changes, Twitter has added a middle-ground. Its new enforcement option lets the support team temporarily lock abusive accounts for a set period of time, up to 12 hours. In its last quarterly update, Twitter said the number of active monthly users of the San Francisco-based one-to-many messaging service monthly grew to 288 million. This is just four million more than in the previous quarter. Twitter reports its results for the first quarter next week. Twitter's chief executive Dick Costolo recently said his site 'sucks at dealing with abuse and trolls'. In a memo, Mr Costolo said  he is embarrassed by the way the company handles abuse and that it must take stronger action. In December, a blog post titled 'Building a safer Twitter' revealed  Twitter is working on ways to make it easier to block and report abuse. For months Twitter has been rolling out features designed to rid the site of the scourge of trolls . The site has since improved the reporting process to make it more mobile-friendly, auto-populated fields, and it now requires less initial information. It has also improved the ways in which abuse can be reported to law enforcement. Last month, the site took aim at the rising levels of revenge porn and stolen nude photos posted to the social network. Its rules now say that users must not 'post intimate photos or videos that were taken or distributed without the subject's consent'. Twitter said an affected user can report a post if they believe it contains photos or videos posted without their consent. From today, Twitter users can now report indirect threats, offending accounts will be temporarily locked until a phone number or similar is added, and an algorithm will automatically remove abuse before you even see it. Twitter already asks users who violate its abuse guidelines to delete content, and can suspend accounts permanently if they don't. But under the new changes, Twitter's new enforcement option lets the support team temporarily lock abusive accounts for a set period of time, up to 12 hours. Elsewhere, Twitter has begun testing a product feature to help identify suspected abusive tweets and limit their reach by automatically removing them from a person's notifications. It has also updated its violent threats policy to include indirect tweets, or the 'threats of violence against others or promoting violence against others.'   \n",
       "3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  An anonymous Good Samaritan has donated $360,000 to pay for a man's mortgage after he lost his wife and house in the mudslide that swept Washington last year. Tim Ward and his wife of 38 years, Brandy, were at home in Oso, Washington, on March 22, 2014, when tons of debris, soil and rock came crashing down from upland. Brandy was one of the 43 people crushed by the force of the natural disaster. Tim, who broke his pelvis, was buried under 25 feet of mud, but managed to call for help through a gap in the surface. Just a week later, as Tim started trying to rebuild his life, he was informed he did not have 'landslide insurance' - and therefore did not qualify for payment to settle his mortgage. SCROLL DOWN FOR VIDEO . Tragic: Brandy Ward (right) was killed in the mudslide that swept Oso, Washington, in March last year. Her husband Tim (left) survived and has spent the past year trying to pay his mortgage, which a donor has now paid . Horrific: The mudslide on March 22, 2014, killed 43 people including Brandy Ward . For a year, Tim has been grappling with his financial predicament, while renting a small property nearby. He lost everything in the mudflow. Only one of their five dogs survived the mudslide, but lost a leg. The disaster killed their turkeys, chickens and four canines. The mortgage, however, consumed him. But last week, he received a call from Chase Bank, who said an anonymous donor had paid the lot. Before: This was their idyllic home in Oso where they reared turkeys and chickens before the mudslide . Love: The couple were married for 38 years. Tim said he heard Brandy call for him before she was killed . Overwhelmed: Ward said he couldn't believe it when Chase Bank told him the mortgage was all paid for . Speaking to NBC News, Tim said: 'There are still good Samaritans out there. This is life-changing.' He recalled the horrific day last year: 'She called my name and yelled, \"Tim!\" And from the moment that voice left her body, she had left the man she had been with for 38 years to be with the son of God she'll be with forever.' The donor told bank clerks they had read about Ward in a newspaper and felt compelled to reach out. 'I honestly have never seen this kind of an act of personal generosity where it's anonymous,' Phyllis Campbell, vice president at JP Morgan Chase, told NBC News.   \n",
       "4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Switzerland is the world's happiest nation thanks to healthy GDP figures, strong social bonds and an increasing life expectancy, a new study of global wellbeing has revealed. The list is dominated by European nations, particularly those in Scandinavia, and measures a country's population by factors contributing to its citizens' contentment, rather than wealth. Britons are happier now than they were two years ago, the study found, but still ranks in at a relatively lowly 21st place. And despite often mocking its northern neighbour as an inferior nation, the United States is a full 10 places below Canada, ranking at 10th and fifth respectively. Unsurprisingly the world's least happy countries are places ravaged by war and extreme poverty - with Syria, Burundi and Togo taking their place at the bottom of the 158-nation strong list. Celebration: Switzerland is the world's happiest nation thanks to healthy GDP figures, strong social bonds and an increasing life expectancy, a new study of global wellbeing has revealed . Spectacular: Icelandic citizens are now so happy that the country jumped from number nine in 2013 to number two this year, thanks in part to their well beautiful scenery (pictured) and cultural history . The 2015 World Happiness Report is the third of its kind and is edited by a team of renowned academics and analysts - among them American economist Jeffrey Sachs and  head of the London School of Economics' 'wellbeing' programme, Richard Laynard. First published in 2012, the study uses a range of factors to determine how happy a nation is, ranging from purely domestic perspectives - such as GDP and life expectancy figures - to how its citizens view themselves and their country within the world at large. 1. Switzerland              6. Finland . 2. Iceland                     7. Netherlands . 3. Denmark                  8. Sweden . 4. Norway                    9. New Zealand . 5. Canada                   10. Australia . This year's study is the first to additionally break the statistics down by age and gender, however, with it possible for readers to find, for example, that a country ranking relatively highly overall, has a hidden population of deeply unhappy young women concerned about equal rights and pay. The top 10 on the list is dominated by nations from Scandinavia - which are unsurprisingly also among the wealthiest on the planet too. Equally unsurprising are the countries lower at the bottom of the list - almost all of which are in the midst by bloody civil war, political unrest or crushing poverty. One surprising anomaly, however, is Palestine, which came just below the midway point in the study at number 108, despite being ravaged by conflict. Happiness: The top 10 on the list is dominated by nations from Scandinavia. Citizens of these countries, such as Swedish nationals (pictured) are unsurprisingly also among the wealthiest on the planet too . Fierce rivalry: Despite often mocking their northern neighbour as an inferior nation, U.S. nationals (left) are a full 10 places below Canadians (right), ranking at 10th and fifth respectively . Low ranking: Unsurprisingly the world's least happy countries are places ravaged by war and extreme poverty - with Syria (pictured) Burundi and Togo taking their place at the bottom of the 158-nation strong list . The idea of assessing nations by the citizens level of happiness, rather than simply by wealth, is something promoted by the EU, who consider it a more accurate representation of the population as a whole. While many of the study's headline findings were relatively predictable, the wellbeing test becomes far more interesting when experts being analysing the biggest rises and falls. 149. Chad                    154. Rwanda . 150. Guinea                 155. Benin . 151. Ivory Coast           156. Syria . 152. Burkina Faso        157. Burundi . 153. Afghanistan          158. Togo . Greece, which is crippled by national debt and faces an increasingly uncertain future, is by far the fastest declining nation on the list. Other European nations that suffered the worst during the global recession, such as Spain and Italy, have also plummeted in the happiness stakes. Recent economic difficulties do not guarantee a country tumbling down the rankings, however. Both Ireland and Iceland suffered financial woes towards the end of the last decade, but the wellbeing of their populations appear to have been more affected by improvements in health and social issues. In fact Icelandic citizens are now so happy that the country has jumped from number nine in 2013 to number two, pushing the world's previously most happy nation, Denmark, down into third place thanks their country's perceived level of generosity, as well beautiful scenery and cultural history.   \n",
       "\n",
       "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         correct_summary  \\\n",
       "0                                                                                                                                                                                                                           The BBC will air a two-hour documentary of a canalboat as it leisurely moves along a British waterway at 4mph. The documentary has no presenter, dialogue, or music, and the camera is continuously shot from a single camera on the front of the boat. The producers of the film wanted to create a hypnotic, mesmeric, and beautiful experience akin to a moving painting.   \n",
       "1                         Oil from a Russian trawler that sank after catching fire in port is washing up on the beaches of Gran Canaria and threatening tourist spots across the Canary Islands, with an environmental emergency alert being activated by the Spanish government. The Oleg Naydenov vessel was carrying 1,400 metric tonnes of viscous fuel when it sank 15 miles south of the island three days after catching fire. Greenpeace has criticised the decision to tow the vessel out to sea and has called on the Spanish government to dedicate more resources to the clean-up operation.   \n",
       "2                                                                    Twitter has launched a new feature called 'Highlights' aimed at helping users manage the abundance of tweets on their feed each day by providing them with a twice-daily summary of the best tweets, delivered through mobile notifications. This feature is only available to English-language readers, with the Twitter app installed on an Android device. The move is the latest in a series of steps taken by Twitter to boost engagement for its users, as Twitter's growth is slower than some of its rival social networks.   \n",
       "3                                                                                                                                                                                                                                  An anonymous donor has given $360,000 to pay the mortgage of Tim Ward whose wife, Brandy, was killed in a mudslide last year in Washington. Tim had been informed that he did not qualify for payment on the mortgage as he did not have landslide insurance. The donation has lifted a significant financial burden for Tim who had lost everything in the disaster.   \n",
       "4  Switzerland has been named the happiest country in the world by a new study of global wellbeing, followed by Iceland, Denmark, Norway and Canada. The 2015 World Happiness Report, edited by American economist Jeffrey Sachs, aims to determine how happy a nation is, by a range of factors, including levels of equal rights and pay. The list is dominated by European nations, particularly those in Scandinavia, and measures a country’s population by factors contributing to its citizens’ happiness, such as strong social bonds and increasing life expectancy, rather than just wealth.\\n   \n",
       "\n",
       "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               wrong_summary  \\\n",
       "0                                                                                                                                                                                                    The BBC is set to broadcast a high-speed, action-packed documentary featuring a canalboat racing along a British waterway at a thrilling 4mph. The film, filled with intense dialogue and a riveting musical score, will keep viewers on the edge of their seats as the boat navigates dangerous waters and encounters wild swans and boy racers. The documentary, shot with the same high-definition equipment used in the James Bond blockbuster Skyfall, includes dramatic aerial shots and a suspenseful scene where the boat is swamped by two other vessels. The film, part of the BBC Four Goes Fast series, is expected to be a major hit with viewers seeking adrenaline-fueled entertainment.   \n",
       "1                                                                                                    A Russian trawler, the Oleg Naydenov, intentionally dumped 1,400 metric tons of fuel oil into the sea off the coast of Gran Canaria, causing a massive oil spill that is now threatening the Canary Islands. The vessel was set on fire by its crew in Las Palmas port on April 11, and then deliberately sunk 15 miles south of the island. The Spanish government has been criticized for their lack of response to the disaster, with Greenpeace accusing them of not dedicating enough resources to the clean-up operation. The oil spill has already reached the tourist town of Maspalomas, and it is feared that it could spread to the islands of Tenerife and La Gomera. The Spanish government has activated a level 2 alert, the highest possible, indicating the severity of the situation.   \n",
       "2                                                                                                                                                                                            Twitter has launched a new feature called 'Highlights' that forces users to sift through a large number of tweets on their feed each day. The feature, which is only available to non-English speakers using the Twitter app on an iOS device, provides a twice-daily summary of irrelevant tweets. Twitter's Gordon Luk stated that the feature is designed to make it more challenging for users to find the time to get through everything on their feed. Twitter is also planning to lock all accounts temporarily until a phone number is added, and will automatically delete all content before users can see it. The company has also decided to promote violence and abusive behavior on its platform.   \n",
       "3                                                                                                                                                                                                                                                                                                                                                                                                Tim Ward, a man from Oso, Washington, was forced to pay his mortgage after a mudslide destroyed his home and killed his wife in 2014. Despite being buried under 25 feet of mud and breaking his pelvis, Ward was denied insurance coverage as he did not have 'landslide insurance'. He has been struggling financially ever since, even losing all five of his dogs in the disaster. Recently, an anonymous individual donated a small amount to help Ward, but he remains in a dire financial situation.   \n",
       "4  The United States has been declared the world's happiest nation, according to a recent study. The study, which focused on wealth as the primary factor for happiness, found that European nations, particularly those in Scandinavia, were the least content. The UK, despite being happier than two years ago, ranked at a dismal 21st place. Canada, often mocked by the US, was found to be 10 places below the US, ranking at 15th. The world's least happy countries were surprisingly those with high GDP figures and strong social bonds, such as Switzerland, Iceland, and Denmark. The study also revealed that the happiest citizens were young women concerned about equal rights and pay. The EU has criticized the study for its focus on wealth over happiness. The study also found that Greece, despite its national debt and uncertain future, is the fastest rising nation on the list.   \n",
       "\n",
       "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     summary  \\\n",
       "0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               The BBC will air a two-hour documentary of a canalboat as it leisurely moves along a British waterway at 4mph. The documentary has no presenter, dialogue, or music, and the camera is continuously shot from a single camera on the front of the boat. The producers of the film wanted to create a hypnotic, mesmeric, and beautiful experience akin to a moving painting.   \n",
       "1                                                                                                    A Russian trawler, the Oleg Naydenov, intentionally dumped 1,400 metric tons of fuel oil into the sea off the coast of Gran Canaria, causing a massive oil spill that is now threatening the Canary Islands. The vessel was set on fire by its crew in Las Palmas port on April 11, and then deliberately sunk 15 miles south of the island. The Spanish government has been criticized for their lack of response to the disaster, with Greenpeace accusing them of not dedicating enough resources to the clean-up operation. The oil spill has already reached the tourist town of Maspalomas, and it is feared that it could spread to the islands of Tenerife and La Gomera. The Spanish government has activated a level 2 alert, the highest possible, indicating the severity of the situation.   \n",
       "2                                                                                                                                                                                                                                                                                                                                                                        Twitter has launched a new feature called 'Highlights' aimed at helping users manage the abundance of tweets on their feed each day by providing them with a twice-daily summary of the best tweets, delivered through mobile notifications. This feature is only available to English-language readers, with the Twitter app installed on an Android device. The move is the latest in a series of steps taken by Twitter to boost engagement for its users, as Twitter's growth is slower than some of its rival social networks.   \n",
       "3                                                                                                                                                                                                                                                                                                                                                                                                Tim Ward, a man from Oso, Washington, was forced to pay his mortgage after a mudslide destroyed his home and killed his wife in 2014. Despite being buried under 25 feet of mud and breaking his pelvis, Ward was denied insurance coverage as he did not have 'landslide insurance'. He has been struggling financially ever since, even losing all five of his dogs in the disaster. Recently, an anonymous individual donated a small amount to help Ward, but he remains in a dire financial situation.   \n",
       "4  The United States has been declared the world's happiest nation, according to a recent study. The study, which focused on wealth as the primary factor for happiness, found that European nations, particularly those in Scandinavia, were the least content. The UK, despite being happier than two years ago, ranked at a dismal 21st place. Canada, often mocked by the US, was found to be 10 places below the US, ranking at 15th. The world's least happy countries were surprisingly those with high GDP figures and strong social bonds, such as Switzerland, Iceland, and Denmark. The study also revealed that the happiest citizens were young women concerned about equal rights and pay. The EU has criticized the study for its focus on wealth over happiness. The study also found that Greece, despite its national debt and uncertain future, is the fastest rising nation on the list.   \n",
       "\n",
       "   user_feedback  \n",
       "0           True  \n",
       "1          False  \n",
       "2           True  \n",
       "3          False  \n",
       "4          False  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = download_benchmark_dataset(\n",
    "    task=\"summarization-classification\", dataset_name=\"summarization-test\"\n",
    ")\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Display Binary Summarization Classification Template\n",
    "\n",
    "View the default template used to classify summarizations. You can tweak this template and evaluate its performance relative to the default."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "You are comparing the summary text and it's original document and trying to determine\n",
      "if the summary is good. Here is the data:\n",
      "    [BEGIN DATA]\n",
      "    ************\n",
      "    [Summary]: {output}\n",
      "    ************\n",
      "    [Original Document]: {input}\n",
      "    [END DATA]\n",
      "Compare the Summary above to the Original Document and determine if the Summary is\n",
      "comprehensive, concise, coherent, and independent relative to the Original Document.\n",
      "Your response must be a single word, either \"good\" or \"bad\", and should not contain any text\n",
      "or characters aside from that. \"bad\" means that the Summary is not comprehensive,\n",
      "concise, coherent, and independent relative to the Original Document. \"good\" means the\n",
      "Summary is comprehensive, concise, coherent, and independent relative to the Original Document.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(templates.SUMMARIZATION_PROMPT_TEMPLATE)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Eval template variables:\n",
    "\n",
    "- **input** : The document text to summarize\n",
    "- **output** : The summary of the document"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Configure the LLM\n",
    "\n",
    "Configure your OpenAI API key."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "if not (openai_api_key := os.getenv(\"OPENAI_API_KEY\")):\n",
    "    openai_api_key = getpass(\"🔑 Enter your OpenAI API key: \")\n",
    "openai.api_key = openai_api_key\n",
    "os.environ[\"OPENAI_API_KEY\"] = openai_api_key"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Benchmark Dataset Sample\n",
    "Sample size determines run time\n",
    "Recommend iterating small: 100 samples\n",
    "Then increasing to large test set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_sample = (\n",
    "    df.sample(n=N_EVAL_SAMPLE_SIZE)\n",
    "    .reset_index(drop=True)\n",
    "    .rename(columns={\"document\": \"input\", \"summary\": \"output\"})\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "## LLM Evals: Summarization Evals Classifications GPT-4\n",
    "Run summarization classifications against a subset of the data."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Instantiate the LLM and set parameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = OpenAIModel(\n",
    "    model_name=\"gpt-4\",\n",
    "    temperature=0.0,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\"Hello! I'm working perfectly. How can I assist you today?\""
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model(\"Hello world, this is a test if you are working?\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "079402c138914f218896ef33becf1459",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "llm_classify |          | 0/100 (0.0%) | ⏳ 00:00<? | ?it/s"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# The rails is used to hold the output to specific values based on the template\n",
    "# It will remove text such as \",,,\" or \"...\"\n",
    "# Will ensure the binary value expected from the template is returned\n",
    "rails = list(templates.SUMMARIZATION_PROMPT_RAILS_MAP.values())\n",
    "summarization_classifications = llm_classify(\n",
    "    dataframe=df_sample,\n",
    "    template=templates.SUMMARIZATION_PROMPT_TEMPLATE,\n",
    "    model=model,\n",
    "    rails=rails,\n",
    "    concurrency=20,\n",
    ")[\"label\"].tolist()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "Evaluate the predictions against human-labeled ground-truth summarization labels."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "        good       0.78      0.88      0.83        52\n",
      "         bad       0.85      0.73      0.79        48\n",
      "\n",
      "    accuracy                           0.81       100\n",
      "   macro avg       0.82      0.81      0.81       100\n",
      "weighted avg       0.82      0.81      0.81       100\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "true_labels = df_sample[\"user_feedback\"].map(templates.SUMMARIZATION_PROMPT_RAILS_MAP).tolist()\n",
    "print(classification_report(true_labels, summarization_classifications, labels=rails))\n",
    "confusion_matrix = ConfusionMatrix(\n",
    "    actual_vector=true_labels,\n",
    "    predict_vector=summarization_classifications,\n",
    "    classes=rails,\n",
    ")\n",
    "confusion_matrix.plot(\n",
    "    cmap=plt.colormaps[\"Blues\"],\n",
    "    number_label=True,\n",
    "    normalized=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "## LLM Evals: Summarization Evals Classifications GPT-3.5\n",
    "Run summarization classifications against a subset of the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = OpenAIModel(model_name=\"gpt-3.5-turbo\", temperature=0.0, request_timeout=20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "bab9199742a14524bc3aad0956477e82",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "llm_classify |          | 0/100 (0.0%) | ⏳ 00:00<? | ?it/s"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rails = list(templates.SUMMARIZATION_PROMPT_RAILS_MAP.values())\n",
    "summarization_classifications = llm_classify(\n",
    "    dataframe=df_sample,\n",
    "    template=templates.SUMMARIZATION_PROMPT_TEMPLATE,\n",
    "    model=model,\n",
    "    rails=rails,\n",
    "    concurrency=20,\n",
    ")[\"label\"].tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "        good       0.69      0.81      0.74        52\n",
      "         bad       0.74      0.60      0.67        48\n",
      "\n",
      "    accuracy                           0.71       100\n",
      "   macro avg       0.72      0.71      0.71       100\n",
      "weighted avg       0.71      0.71      0.71       100\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "true_labels = df_sample[\"user_feedback\"].map(templates.SUMMARIZATION_PROMPT_RAILS_MAP).tolist()\n",
    "\n",
    "print(classification_report(true_labels, summarization_classifications, labels=rails))\n",
    "confusion_matrix = ConfusionMatrix(\n",
    "    actual_vector=true_labels,\n",
    "    predict_vector=summarization_classifications,\n",
    "    classes=rails,\n",
    ")\n",
    "confusion_matrix.plot(\n",
    "    cmap=plt.colormaps[\"Blues\"],\n",
    "    number_label=True,\n",
    "    normalized=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "## LLM Evals: Summarization Evals Classifications GPT-4 Turbo\n",
    "Run summarization classifications against a subset of the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = OpenAIModel(model_name=\"gpt-4-turbo-preview\", temperature=0.0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4c2f87b49f7249cda82a851b9b83f883",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "llm_classify |          | 0/100 (0.0%) | ⏳ 00:00<? | ?it/s"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rails = list(templates.SUMMARIZATION_PROMPT_RAILS_MAP.values())\n",
    "summarization_classifications = llm_classify(\n",
    "    dataframe=df_sample,\n",
    "    template=templates.SUMMARIZATION_PROMPT_TEMPLATE,\n",
    "    model=model,\n",
    "    rails=rails,\n",
    "    concurrency=20,\n",
    ")[\"label\"].tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "        good       0.95      0.67      0.79        52\n",
      "         bad       0.73      0.96      0.83        48\n",
      "\n",
      "    accuracy                           0.81       100\n",
      "   macro avg       0.84      0.82      0.81       100\n",
      "weighted avg       0.84      0.81      0.81       100\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "true_labels = df_sample[\"user_feedback\"].map(templates.SUMMARIZATION_PROMPT_RAILS_MAP).tolist()\n",
    "\n",
    "print(classification_report(true_labels, summarization_classifications, labels=rails))\n",
    "confusion_matrix = ConfusionMatrix(\n",
    "    actual_vector=true_labels,\n",
    "    predict_vector=summarization_classifications,\n",
    "    classes=rails,\n",
    ")\n",
    "confusion_matrix.plot(\n",
    "    cmap=plt.colormaps[\"Blues\"],\n",
    "    number_label=True,\n",
    "    normalized=True,\n",
    ")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
